/*
 * QueueProtocoloPlano.cpp
 *
 *  Created on: Dec 3, 2013
 *      Author: gonprieto
 */

#include "QueueProtocoloPlano.h"
#include "MsgQueue.h"
#include "../utils/Logger.h"

QueueProtocoloPlano::QueueProtocoloPlano(const std::string& file, const char key ): e(file,key),d(file,key) {
	Logger::getInstance().logMessage(Logger::TRACE, "QueueProtocoloPlano- File:" + file+ " - key:" + key);

}

QueueProtocoloPlano::~QueueProtocoloPlano() {
}

Mensaje* QueueProtocoloPlano::leerMensaje(unsigned int idToRead){
	d.dequeue(idToRead);

	messageQueue msg = d.get_message();

	std::string mensajeSerializado = msg.texto;

	if ( msg.texto != NULL && !mensajeSerializado.empty() ){
		return pp.deserializar(mensajeSerializado);
	}

	return NULL;
}

int QueueProtocoloPlano::escribirMensaje(unsigned int idToWrite,Mensaje* mensaje){
	int retorno=0;

	bool exito = e.enqueue(idToWrite,pp.serializar(*mensaje));
	if ( !exito ){
		Logger::getInstance().logMessage(Logger::ERROR, "No pudo enqueue de mensaje");

		retorno=-1;
	}

	return retorno;
}


void QueueProtocoloPlano::cerrar(){
	//LLamo al de enqueue, pero podria llamar al dequeue como el mismo resultado
	e.cerrar();
}
